Note: This tutorial assumes that you have completed the previous tutorials: ROS tutorials. |
Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags. |
Fusing multiple measurements originating from the same object
Description: One object can generate multiple measurements at one time step. This can be the result of a poor object detection, but is also common in scenarios including multiple sensors or robots. This tutorial demonstrates the world model's ability to fuse multiple measurements with the same time stamp originating from the same object.Tutorial Level: BEGINNER
Next Tutorial: Data association exploiting multiple object attributes
Contents
Goal
The goal of the wire meta package is fusing measurements into one consistent world state estimate. In order to achieve this goal the data association problem has to be solved. This demo shows how the data association problem is solved in a static scene where multiple measurements originate from the same object. The video shows both the detections and the estimated world state.
Approach
All measurements are close to each other and have a relatively high measurement covariance matrix. As a result, the world modeling algorithm associates all measurements with the same object. All measurements are used to update the object position at each time step using a Kalman filter with constant velocity motion model.
Data
In order to be able to reproduce the result shown in the video above, make sure that you have downloaded and compiled the wire packages:
$ git clone https://github.com/tue-robotics/wire.git $ catkin_make
Download the bag-file containing the data (demo01.bag) and decompress the file:
$ rosbag decompress demo01.bag
The bag file contains tfs, object detections and both rgb and depth images. The images are only included for ease of interpretation and inspection. These are not used by wire.
Reproducing the result
Start a ROS core:
$ roscore
Then, set the use_sim_time parameter to true:
$ rosparam set use_sim_time true
and launch the wire_core:
$ roslaunch wire_core start.launch
In a second terminal, launch the visualization:
$ roslaunch wire_tutorials rviz_wire_kinetic.launch
Finally, play back the data:
$ rosbag play demo01.bag --clock
The results should be similar to the results shown in the video above.